// Vector Demo
// Created by FanGccU on 2025/6/21.
//
#include <iostream>
#include <vector>
using namespace std;

void func1() {
    // 定义了一个空的向量
    vector<int> vec;

    cout << "vector的长度为：" << vec.size() << endl;

    for (int i = 0; i < 5; i++) {
        vec.push_back(i); // 向尾部添加值，自动扩容向量长度
    }

    cout << "vector当前的长度为：" << vec.size() << endl;

    cout << "vector里面的数据有：";
    for (int i = 0; i < vec.size(); i++) {
        cout << vec[i] << "\t";
    }
    cout << endl;

    cout << "使用迭代器便利：";
    vector<int>::iterator it = vec.begin();
    while (it != vec.end()) {
        cout << *it << "\t";
        it++;
    }
    // begin() 返回迭代器，指向向量的第一个元素
    // end() 迭代器，指向向量的最后一个元素

    cout << endl;

    cout << "使用迭代器便利2：";
    for (auto i = vec.begin(); i != vec.end(); ++i) {
        cout << *i << "\t";
    }
    cout << endl;

    cout << "返回向量的第一个元素：" << *vec.begin() << endl;
    cout << "返回向量的最后一个元素：" << *vec.end() << endl;
}

void func2() {
    // 定义一个长度为的0的向量容器
    vector<int> v1;
    // 定义一个长度为10的向量容器
    vector<int> vec(10);
    // 定义一个长度为5默认值为2的向量容器
    vector<int> v3(5, 2);
    // 创建一个包含5个元素的向量容器
    vector<int> v4 = {1, 2, 3, 4, 5};

    // 当前的vec的容量为10

    vec.push_back(550);

    // 因为上面追加了个元素，超出的容器的长度，将自动扩容

    vec.push_back(550);

    cout << "vec当前的长度为：" << vec.size() << endl; // 容器中存储元素的个数
    cout << "vec当前的容量为：" << vec.capacity() << endl; // 容器的容量，在存储元素时如果容器长度不够会自动进行扩容，容量就是容器的当前长度

    for (int n: vec) {
        cout << n << "\t";
    }

    cout << endl;

    /*
     * -----------------------------
     *  size 和 capacity 区别
     *
     *  size 容器中存储的元素个数
     *  capacity 容器的容量，当元素的个数超出容量时将自动扩容
     */
    vector<int> vec5;
    vec5.reserve(5); // 预留10个容量，避免自动扩容，只要超过5个元素才会再次容量

    cout << "vec5中的长度为：" << vec5.size() << endl; // 0
    cout << "vec5中的容量为：" << vec5.capacity() << endl; // 5

    for (int i = 0; i < 5; i++) {
        vec5.push_back(i);
    }
    // 向vec5中添加了5个元素，此时vec5的长度为5
    cout << "--vec5中的长度为：" << vec5.size() << endl; // 5
    // 此时vec5的容量依旧是5，因为没有超出预设置的大小
    cout << "--vec5中的容量为：" << vec5.capacity() << endl; // 5

    vec5.push_back(66);  // 超出设置的容量大小，容量将基于自身的一倍大小自动扩容

    cout << "------vec5中的长度为：" << vec5.size() << endl; // 6
    cout << "------vec5中的容量为：" << vec5.capacity() << endl; // 10
}

int main(int argc, char *argv[]) {
    func2();
}
